iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

地端建置大雜燴-下從網路線上到Grafana的建置之路系列 第 10

Day10 Docker + Private Registry 建立 幫 Image 找安全的家吧!

  • 分享至 

  • xImage
  •  

Docker

Docker Install

先來安裝 Docker 一樣透過 APT 來安裝 docker --version 確認安裝

apt-get install -y docker.io
docker --version

dockerfile 撰寫

在開始操作 Docker 前先來寫寫 dockerfile 這邊有一些注意事項

  • dockerfile 內開頭的指令都是大寫
  • 使用 可以使用 alpine 的 Images 去減少 Image 大小*1
  • dockerfile 內不會對檔案系統有更動的操作最好寫在前面 *2

*1: alpine 是一個非常小的 Linux distribution,如果沒有特別要求使用的 OS 可以選擇 alpine 來大幅減少 Image Size。
*2: docker 的 image 是透過一層一層堆疊來建立的,每一層對應的就是 dockerfile 寫的指令執行後的結果,若是這個結果是跟上一次 build 時是一樣的, docker 就不會重複建立同一層 image ,而是使用上一次 build 起來的 image 減少 build 的時間和儲存空間。

大致上要注意的地方是這些來開始寫 dockerfile 吧 比較常使用的指令有這幾個

FROM: 指定 Base Image
ENV: 指定環境變數
EXPOSE: 指定要對外開放的 Port
COPY: 從本機複製檔案進入 Image
RUN: 在 Image 內執行指令
CMD: 設定 Image 啟動的預設指令

接著試著寫一個 linux 跑 apache2 的 dockerfile 試試看

FROM alpine:latest
EXPOSE 80
RUN apk add apache2
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

這樣子就寫好了接下來準備 build

Docker 操作

docker 的操作基本是會有這些

docker pull: 拉 Image 下來到 local 使用
docker push: 推 Image 到 Registry 存放
docker build: 建立 Image
docker tag: 改變 Image 的 Tag
docker images: 顯示 Image 清單
docker ps: 顯示 docker 目前執行的 Container
docker kill: 關掉 Container
docker rm: 刪除 Docker 上的資源(Image/Container)

來 build 剛剛寫好的 dockerfile

root@LCR:~/docker# docker build -t test-apache:0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine:latest
 ---> 7e01a0d0a1dc
Step 2/4 : EXPOSE 80
 ---> Running in 56a2c5253220
Removing intermediate container 56a2c5253220
 ---> d50066a88255
Step 3/4 : RUN apk add apache2
 ---> Running in 6c2f0fd30854
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libuuid (2.38.1-r8)
(2/6) Installing apr (1.7.4-r0)
(3/6) Installing libexpat (2.5.0-r1)
(4/6) Installing apr-util (1.6.3-r1)
(5/6) Installing pcre2 (10.42-r1)
(6/6) Installing apache2 (2.4.57-r3)
Executing apache2-2.4.57-r3.pre-install
Executing busybox-1.36.1-r2.trigger
OK: 11 MiB in 21 packages
Removing intermediate container 6c2f0fd30854
 ---> a9abe16a3176
Step 4/4 : CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
 ---> Running in ee0e8c6758b2
Removing intermediate container ee0e8c6758b2
 ---> c84ed029757c
Successfully built c84ed029757c
Successfully tagged test-apache:0
root@LCR:~/docker#

出現成功後就可以確認 build 出來的 image 了

root@LCR:~/docker# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
test-apache   0         c84ed029757c   3 minutes ago   13.1MB
alpine        latest    7e01a0d0a1dc   6 weeks ago     7.34MB
root@LCR:~/docker#

這邊的 alpine 是在 build test-apache 的時候做為 Base Image 使用
並不是自動產生在那邊的

最後來測試看看 Image 能不能正常運作

docker run -it -p 80:80 --name test test-apache:0

開另一個 Terminal 用 curl 敲

root@LCR:~/docker# curl localhost
<html><body><h1>It works!</h1></body></html>
root@LCR:~/docker#

確認能夠運作後就能 push 到 Registry 上了

Private Registry

這邊使用官方提供的 Image 建立 Registry 進行操作

docker run -d -p 5000:5000 --restart always --name registry registry:2
docker ps -a

https://ithelp.ithome.com.tw/upload/images/20230925/20162773Tw35ZHwQch.png

docker tag test-apache:0 localhost:5000/test-apache:0
docker push localhost:5000/test-apache:0

等待跑條完成後就成功
We dit it 成功了

但這個 Registry 之後可能會被搬去其他地方 :D


上一篇
Day9 Debian DNS Server 建置
下一篇
Day11 Windows Server 安裝 重回 GUI 的懷抱
系列文
地端建置大雜燴-下從網路線上到Grafana的建置之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言